// 处理 Array

import { ARRAY_METHODS } from "./config";
import observeArr from "./observeArr";

var originArrMethods = Array.prototype,
  arrMethods = Object.create(originArrMethods)

// 原数组的方法正常执行
// 数据劫持在该层包装执行
ARRAY_METHODS.map(function (methodName) {
  arrMethods[methodName] = function () {
    // 注意 arguments 是一个 类数组 对象
    // slice 从 start 到 end 的浅拷贝
    var args = Array.prototype.slice.call(arguments),
      rt = originArrMethods[methodName].apply(this, args)

    // push unshift splice 可能增加 数组|对象 
    console.log('数组新方法', args)
    var newArr

    // 将数组新增的值 提取出来
    switch (methodName) {
      case 'push':
      case 'unshift':
        newArr = args
        break;
      case 'splice':
        // 由于参数 (position, length, value) value 可能是多种值
        newArr = Array.slice(2) // 参数 value
        break;
      default:
        break;
    }

    newArr && observeArr(newArr)
    return rt
  }
})

export {
  arrMethods
}